// 日志工具类

// 最大日志条数
const MAX_LOG_COUNT = 1000

// 日志类型枚举
export const LOG_TYPES = {
  INFO: 'info',
  WARN: 'warn',
  ERROR: 'error',
  DEBUG: 'debug'
}

/**
 * 记录本地日志
 * @param {string} type 日志类型
 * @param {string} content 日志内容
 * @param {string} source 日志来源
 */
export const recordLocalLog = (type, content, source = '') => {
  try {
    // 获取现有日志
    let logs = uni.getStorageSync('localLogs') || []
    
    // 创建新日志条目
    const newLog = {
      id: Date.now() + '-' + Math.random().toString(36).substr(2, 9),
      timestamp: Date.now(),
      type,
      content,
      source
    }
    
    // 将新日志添加到数组开头（时间倒序）
    logs.unshift(newLog)
    
    // 限制日志数量
    if (logs.length > MAX_LOG_COUNT) {
      logs = logs.slice(0, MAX_LOG_COUNT)
    }
    
    // 保存到本地存储
    uni.setStorageSync('localLogs', logs)
  } catch (error) {
    console.error('记录本地日志失败:', error)
  }
}

/**
 * 获取本地日志
 * @param {string} type 日志类型（可选，不传则获取所有类型）
 * @param {number} limit 获取条数限制（可选，默认20条）
 * @returns {Array} 日志数组
 */
export const getLocalLogs = (type = '', limit = 20) => {
  try {
    // 获取现有日志
    let logs = uni.getStorageSync('localLogs') || []
    
    // 按类型筛选
    if (type) {
      logs = logs.filter(log => log.type === type)
    }
    
    // 限制返回数量
    if (limit > 0) {
      logs = logs.slice(0, limit)
    }
    
    return logs
  } catch (error) {
    console.error('获取本地日志失败:', error)
    return []
  }
}

/**
 * 清除本地日志
 * @param {string} type 日志类型（可选，不传则清除所有日志）
 */
export const clearLocalLogs = (type = '') => {
  try {
    if (type) {
      // 按类型清除
      let logs = uni.getStorageSync('localLogs') || []
      logs = logs.filter(log => log.type !== type)
      uni.setStorageSync('localLogs', logs)
    } else {
      // 清除所有日志
      uni.removeStorageSync('localLogs')
    }
  } catch (error) {
    console.error('清除本地日志失败:', error)
  }
}

/**
 * 格式化时间戳为可读时间
 * @param {number} timestamp 时间戳
 * @returns {string} 格式化后的时间
 */
export const formatLogTime = (timestamp) => {
  const date = new Date(timestamp)
  const year = date.getFullYear()
  const month = String(date.getMonth() + 1).padStart(2, '0')
  const day = String(date.getDate()).padStart(2, '0')
  const hours = String(date.getHours()).padStart(2, '0')
  const minutes = String(date.getMinutes()).padStart(2, '0')
  const seconds = String(date.getSeconds()).padStart(2, '0')
  
  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}